Custom Exception তৈরি এবং Handle করা

Java Technologies - স্প্রিং জেডিবিসি (Spring JDBC) Spring JDBC এবং Exception Handling |
88
88

Spring JDBC-এ Custom Exception তৈরি এবং সেগুলি সঠিকভাবে Handle করা গুরুত্বপূর্ণ, কারণ এটি আপনার অ্যাপ্লিকেশনকে আরও robust এবং মেইন্টেনেবল করে তোলে। Spring JDBC সাধারণত SQLException অথবা DataAccessException (Spring JDBC এর এক্সসেপশন হায়ারার্কি) ব্যবহার করে, তবে আপনি যদি আরও নির্দিষ্ট এবং কাস্টমাইজড এক্সসেপশন তৈরি করতে চান, তবে সেটা আপনার কোডের কার্যকারিতা এবং ত্রুটি হ্যান্ডলিংকে আরো ভালো করতে সাহায্য করবে।

কাস্টম এক্সসেপশন তৈরি করা

Spring-এ কাস্টম এক্সসেপশন তৈরি করতে, সাধারণত আপনি একটি নতুন ক্লাস তৈরি করবেন যা RuntimeException অথবা Exception ক্লাস থেকে ইনহেরিট করবে।

উদাহরণ ১: Custom Exception তৈরি করা

// Custom Exception class
public class UserNotFoundException extends RuntimeException {
    
    // Default constructor
    public UserNotFoundException(String message) {
        super(message);
    }

    // Constructor with cause
    public UserNotFoundException(String message, Throwable cause) {
        super(message, cause);
    }
}

এখানে:

  • UserNotFoundException একটি কাস্টম এক্সসেপশন ক্লাস তৈরি করা হয়েছে যা RuntimeException থেকে ইনহেরিট করেছে।
  • super(message) ব্যবহার করে আপনি এক্সসেপশন বার্তা পাঠাতে পারেন।

উদাহরণ ২: Custom Exception ব্যবহার করে Spring JDBC এর মধ্যে ডেটা অপারেশন

এখন, ধরুন আমরা একটি রেপোজিটরি ক্লাস তৈরি করতে যাচ্ছি যেখানে ডেটাবেস থেকে ইউজারের তথ্য নেওয়ার সময় যদি কোনো ইউজার পাওয়া না যায়, তাহলে আমরা কাস্টম এক্সসেপশনটি থ্রো করবো।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.Map;

@Repository
public class UserRepository {

    @Autowired
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    // Method to fetch user by ID
    public User getUserById(int userId) {
        String sql = "SELECT * FROM users WHERE user_id = :userId";

        Map<String, Object> params = new HashMap<>();
        params.put("userId", userId);

        // Executing the query
        User user = namedParameterJdbcTemplate.queryForObject(sql, params, new UserRowMapper());

        // If user is not found, throw custom exception
        if (user == null) {
            throw new UserNotFoundException("User with ID " + userId + " not found.");
        }

        return user;
    }
}

এখানে:

  • getUserById() মেথডে যদি কোনো ইউজার না পাওয়া যায়, তাহলে আমরা UserNotFoundException থ্রো করছি।
  • queryForObject() মেথডটি ইউজারকে ডেটাবেস থেকে ফেরত আনে, এবং যদি ইউজার না পাওয়া যায়, তাহলে user == null চেকের মাধ্যমে কাস্টম এক্সসেপশন থ্রো করা হয়।

উদাহরণ ৩: কাস্টম এক্সসেপশন হ্যান্ডলিং

Spring Framework এর @ControllerAdvice বা @ExceptionHandler ব্যবহার করে কাস্টম এক্সসেপশনগুলি গ্লোবালি হ্যান্ডল করা যেতে পারে। এটি একটি সাধারণ পদ্ধতি যেখানে আপনি এক্সসেপশন গুলোকে একটি সেন্ট্রাল প্লেসে ক্যাচ এবং হ্যান্ডল করতে পারেন।

উদাহরণ: @ControllerAdvice ব্যবহার করে এক্সসেপশন হ্যান্ডলিং

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ControllerAdvice;

@ControllerAdvice
public class GlobalExceptionHandler {

    // Handle UserNotFoundException globally
    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
        // You can log the exception or send a custom response
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
    }

    // Handle any other general exceptions
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGeneralException(Exception ex) {
        return new ResponseEntity<>("An unexpected error occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

এখানে:

  • @ControllerAdvice: এটি Spring-এ গ্লোবাল এক্সসেপশন হ্যান্ডলিং এর জন্য ব্যবহৃত একটি অ্যানোটেশন।
  • @ExceptionHandler: এটি এক্সসেপশন হ্যান্ডল করার জন্য ব্যবহার করা হয়, যেখানে আপনি কাস্টম এক্সসেপশন বা অন্যান্য সাধারণ এক্সসেপশন হ্যান্ডল করতে পারেন।
  • ResponseEntity: এখানে ResponseEntity ব্যবহার করা হয়েছে, যা HTTP স্ট্যাটাস এবং কাস্টম মেসেজ সহ রেসপন্স ফেরত দেয়।

উপসংহার

  1. Custom Exception তৈরি করা: Spring JDBC-তে কাস্টম এক্সসেপশন তৈরি করতে RuntimeException বা Exception ক্লাস থেকে ইনহেরিট করা হয়।
  2. Exception Handling: Spring-এ @ControllerAdvice বা @ExceptionHandler ব্যবহার করে কাস্টম এক্সসেপশনগুলি গ্লোবালি হ্যান্ডল করা যেতে পারে। এটি আপনার অ্যাপ্লিকেশনের রেজিলিয়েন্স এবং রক্ষণাবেক্ষণ ক্ষমতা বৃদ্ধি করে।
  3. Advantages:
    • স্পষ্ট ত্রুটি বার্তা: কাস্টম এক্সসেপশন ব্যবহারের মাধ্যমে আপনি স্পষ্ট এবং অর্থপূর্ণ ত্রুটি বার্তা প্রদান করতে পারবেন।
    • কাস্টম লজিক: আপনি নিজস্ব এক্সসেপশন কাস্টমাইজ করতে পারেন যা ডেটাবেস বা ব্যবসায়িক লজিকের জন্য উপযুক্ত হবে।
    • সেন্ট্রালাইজড হ্যান্ডলিং: গ্লোবাল এক্সসেপশন হ্যান্ডলিং এর মাধ্যমে সব এক্সসেপশন একটি জায়গায় হ্যান্ডল করা যায়, যা কোডকে পরিষ্কার এবং সংগঠিত রাখে।

এভাবে Spring JDBC-তে Custom Exception তৈরি এবং Handle করা খুবই সহজ এবং কার্যকর পদ্ধতি।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion